package com.sikulifang.bank.simulation.util;

import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Entity;

import java.util.Collection;
import java.util.List;
import java.util.Locale;

/**
 * ClassName DataUtil
 * Description 处理数据
 *
 * @author Yat
 * Date 2023/6/2 11:39
 * version 1.0
 */
public class DataUtil {

    /**
     * Description: 下划线转驼峰
     * <p>
     * Date: 2023年6月16日, 0016 14:37
     *
     * @return {@link Dict}
     */
    public static Dict toCamelCase(Entity dbEntity) {
        Dict result = new Dict();
        if (null == dbEntity) {
            return result;
        }

        for (String tableFieldName : dbEntity.getFieldNames()) {
            Object data = dbEntity.get(tableFieldName);
            if (null == data) {
                data = "";
            }

            String key = StrUtil.toCamelCase(tableFieldName.toLowerCase(Locale.ROOT));
            result.set(key, data);
        }
        return result;
    }

    /**
     * Description: 下划线转驼峰
     * <p>
     * Date: 2023年6月16日, 0016 14:37
     *
     * @return {@link Dict}
     */
    public static List<Dict> toCamelCase(Collection<Entity> list) {
        return list.stream().filter(ObjectUtil::isNotNull).map(DataUtil::toCamelCase).toList();
    }

    /**
     * Description: 驼峰式命名的字符串转换为下划线方式
     * <p>
     * Date: 2023年6月16日, 0016 14:37
     *
     * @return {@link Entity}
     */
    public static Entity toUnderlineCase(Dict dict) {
        Entity result = new Entity();
        for (String key : dict.keySet()) {
            String filed = StrUtil.toUnderlineCase(key);
            result.set(filed, dict.get(key));
        }
        return result;
    }

}
